﻿using System.Web.Mvc;

namespace ContactManagement.AppCode
{
    /// <summary>
    /// Custom Message, damit Nachrichten auch über Views hinweg dargestellt werden können.
    /// </summary>
    public class CustomMessage
    {
        #region static
        /// <summary>
        /// Gibt eine Instanz von CustomMessage zurück um Benutzerdefinierte Messages über Views hinweg anzeigen zu können.
        /// http://stackoverflow.com/questions/4642845/asp-net-mvc-how-to-preserve-modelstate-errors-across-redirecttoaction
        /// </summary>
        /// <param name="controller">Der Controller damit auf TempData zugegriffen werden kann.</param>
        /// <returns></returns>
        public static CustomMessage CurrentMessage(Controller controller)
        {
            return new CustomMessage(controller);
        }
        #endregion

        #region Member
        /// <summary>
        /// Constante die für den Tempdata[TempMessageString] benutzt wird.
        /// </summary>
        public const string TempMessageString = "CMTempMessageString";

        /// <summary>
        /// Der aktuelle Controller um auf 
        /// </summary>
        public Controller CurrentController { get; set; }
        #endregion

        #region Konstruktor
        /// <summary>
        /// Initialisieren der Methode, der Controller wird benötigt damit man auf das TempData zurückgreifen kann
        /// </summary>
        /// <param name="controller">Der aktuelle Controller damit TempData verwendet werden kann</param>
        private CustomMessage(Controller controller)
        {
            CurrentController = controller;
        }
        #endregion

        #region Public Functions
        /// <summary>
        /// Hinzufügen der Custommessage zu den TempData, damit dieser Mittels des passendne HTMLHelpers auf der passenden Seite angezeigt werden kann.
        /// </summary>
        /// <param name="message">Die Message die angezeigt werden soll</param>
        /// <param name="messageType">Der Messagetyp der angezeigt werden soll</param>
        public void AddMessage(string message, MessageTypes messageType)
        {
            if (message != null)
            {
                //Die Message im TempData hinterlegen, damit diese dann von der Passenden Helper Methode dargestellt werden kann.
                CurrentController.TempData[TempMessageString] = new Message(message, messageType);
            }
        }
        #endregion
    }
}